package 中等.链表;

import util.ListNode;

/**
 * 给你两个链表 list1 和 list2 ，它们包含的元素分别为 n 个和 m 个。
 * 请你将 list1 中下标从 a 到 b 的全部节点都删除，并将list2 接在被删除节点的位置。
 * 下图中蓝色边和节点展示了操作后的结果：
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/merge-in-between-linked-lists
 */
public class 合并两个链表_1669 {

    public static void main(String[] args) {

    }

    /**
     * 模拟
     * 找到 list1 中索引 a-1 和 b+1 的节点
     * 将 a-1 的节点指向 list2 根节点，将 list2 尾节点指向 b+1 节点
     */
    public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
        int idx = 0;
        ListNode aPre1Node = list1;
        while (idx < a - 1) {
            aPre1Node = aPre1Node.next;
            idx++;
        }

        ListNode bNext1Node = aPre1Node;
        while (idx <= b) {
            bNext1Node = bNext1Node.next;
            idx++;
        }

        aPre1Node.next = list2;
        while (list2.next != null) {
            list2 = list2.next;
        }

        list2.next = bNext1Node;
        return list1;
    }

}
